home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / GameKit / gamekit-1 / InfoController.m < prev    next >
Text File  |  1995-06-12  |  7KB  |  297 lines

  1.  
  2. #import <gamekit/gamekit.h>
  3. #import <daymisckit/daymisckit.h>
  4. #import <strings.h>
  5. #import <libc.h>
  6.  
  7. #define authorEmail [strings valueForStringKey:"Author"]
  8. #define _versionString [strings valueForStringKey:"Version"]
  9.  
  10. /* static char *stripnl(char *s)
  11. {
  12.     char *p;
  13.     for (p = s; *p; p++)
  14.         if (*p == '\n' || *p == '\r') *p = '\0';
  15.     return s;
  16. }
  17.  
  18. char *execstr(s)
  19. char *s;
  20. {
  21.     FILE *f = popen(s,"r");
  22.     char *p = s;
  23.     *s = '\0';
  24.     if (f){
  25.         while (fgets(p,256,f))
  26.             stripnl(p), p += strlen(p);
  27.         pclose(f);
  28.     }
  29.     return s;
  30. } */
  31.  
  32. @implementation InfoController
  33.  
  34. - init                // make sure that *Panel is nil.
  35. {
  36.     self = [super init];
  37.     infoPanel = nil;
  38.     registerPanel = nil;
  39.     orderFormPanel = nil;
  40.     keyFileName = malloc(strlen([NXApp appDirectory]) + 8);
  41.     // get name of key file (inside app wrapper)
  42.     strcpy(keyFileName, [NXApp appDirectory]);
  43.     strcat (keyFileName, "/key");
  44.     key = malloc(64);
  45.     serialNum = malloc(64);
  46.     strcpy(serialNum, unRegSerial);
  47.     [self readKey];
  48.     return self;
  49. }
  50.  
  51. - appDidInit:sender    // forwarded by GameBrain
  52. {
  53.     if (!strings) strings = [[NXApp delegate] mainStrings];
  54.     return self;
  55. }
  56.  
  57. - niftyView { return niftyView; }
  58.  
  59. - readKey
  60. { // **** need to check and see if a key is in defaults system if can't get one from the file.
  61.     NXTypedStream *typedStream;
  62.     FILE *testFile;
  63.     char *temp;
  64.  
  65.     testFile = fopen(keyFileName, "r"); // see if file exists; circumvents
  66.     if (testFile == NULL) {
  67.         if ([strings valueForStringKey:"NotRegistered"])
  68.             strcpy(key, [strings valueForStringKey:"NotRegistered"]);
  69.         else strcpy(key, "No key.");
  70.         return self;
  71.     }
  72.     fclose(testFile);
  73.     typedStream = NXOpenTypedStreamForFile(keyFileName, NX_READONLY);
  74.     NXReadTypes(typedStream, "*", &temp);
  75.     if (temp) { strcpy(key, temp);
  76.     } else {
  77.         if ([strings valueForStringKey:"NotRegistered"]) {
  78.             strcpy(key, [strings valueForStringKey:"NotRegistered"]);
  79.         } else { strcpy(key, "No key."); }
  80.     }
  81.     NXCloseTypedStream(typedStream);
  82.  
  83.     return self;
  84. }
  85.  
  86. - writeKey
  87. { // ***** save the key in the defaults system, too!
  88.     NXTypedStream *typedStream;
  89.  
  90.     typedStream = NXOpenTypedStreamForFile(keyFileName, NX_WRITEONLY);
  91.     if (!typedStream) {
  92.         NXRunAlertPanel("writeKey",[strings valueForStringKey:"CantReg"],
  93.             NULL, NULL, [strings valueForStringKey:"OK"]);
  94.         return self;
  95.     }
  96.     NXWriteTypes(typedStream, "*", &key);
  97.     NXCloseTypedStream(typedStream);
  98.     return self;
  99. }
  100.  
  101. - infoPanel        // return the infoPanel, load it if needed.
  102. {
  103.     if( !infoPanel)
  104.         [NXApp loadNibSection:"InfoPanel.nib" owner:self withNames:NO];
  105.     return infoPanel;
  106. }
  107.  
  108. - registerPanel        // return the registerPanel, load it if needed.
  109. {
  110.     if( !registerPanel)
  111.         [NXApp loadNibSection:"Register.nib" owner:self withNames:NO];
  112.     return registerPanel;
  113. }
  114.  
  115. - orderFormPanel        // return the orderFormPanel, load it if needed.
  116. {
  117.     if( !orderFormPanel)
  118.         [NXApp loadNibSection:"OrderForm.nib" owner:self withNames:NO];
  119.     return orderFormPanel;
  120. }
  121.  
  122. - (const char *)versionString
  123. {
  124.     return _versionString;
  125. }
  126.  
  127. - info:sender        // make the info panel be up there.
  128. {
  129.     [[self infoPanel] orderFront:sender];
  130.     [versionText setStringValue:_versionString];
  131.     [versionDateText setStringValue:[strings valueForStringKey:"VersionDate"]];
  132.     [niftyView start:self]; // will stop automatically on close by
  133.     // using window's delegate method -windowWillClose:
  134.     return self;
  135. }
  136.  
  137. - readme:sender    // make the README panel be up there.
  138. {
  139.     [[[NXHelpPanel new]
  140.             showFile:"README.rtfd" atMarker:NULL]
  141.             makeKeyAndOrderFront:self];
  142.     return self;
  143. }
  144.  
  145. - license:sender    // make the license panel be up there.
  146. {
  147.     [[[NXHelpPanel new]
  148.             showFile:"License.rtfd" atMarker:NULL]
  149.             makeKeyAndOrderFront:self];
  150.     return self;
  151. }
  152.  
  153. - registration:sender
  154. {
  155.     char *tmp2str = malloc(64);
  156.  
  157.     [self registerPanel]; // make sure nib is loaded
  158.     if ([self notRegistered])
  159.         [[regText setStringValue:[strings valueForStringKey:"Unreg"]]
  160.             setTextGray:NX_WHITE];
  161.     else {
  162.         sprintf(tmp2str, [strings valueForStringKey:"Reg"], serialNum);
  163.         [[regText setStringValue:tmp2str]
  164.             setTextGray:NX_DKGRAY];
  165.     }
  166.     free(tmp2str);
  167.     [[self registerPanel] makeFirstResponder:regNumText];
  168.     if (!strlen(key)) strcpy(key, [strings valueForStringKey:"NotRegistered"]);
  169.     [regNumText setStringValue:key];
  170.     [regNumText selectText:self];
  171.     [NXApp runModalFor:[self registerPanel]];
  172.     return self;
  173. }
  174.  
  175. - orderForm:sender
  176. {
  177.     [[self orderFormPanel] makeKeyAndOrderFront:sender];
  178.     return self;
  179. }
  180.  
  181. - (BOOL)notRegistered
  182. {    // determine if the user has registered.
  183.     const char *tmpstr = key;
  184.     char *tmp2str = malloc(64);
  185.     
  186.     if (!tmpstr) {
  187.         [[regText setStringValue:[strings valueForStringKey:"Unreg"]]
  188.             setTextGray:NX_WHITE];
  189.         free(tmp2str);
  190.         return YES;
  191.     }
  192.  
  193.     if ([self keyOK]) {
  194.         sprintf(tmp2str, [strings valueForStringKey:"Reg"], serialNum);
  195.         [[regText setStringValue:tmp2str]
  196.             setTextGray:NX_DKGRAY];
  197.         free(tmp2str);
  198.         return NO;
  199.     }
  200.         [[regText setStringValue:[strings valueForStringKey:"Unreg"]]
  201.             setTextGray:NX_WHITE];
  202.     free(tmp2str);
  203.     return YES;
  204. }
  205.  
  206. - (BOOL)keyOK
  207. {    // override to check the "key" variable (a char *) for proper values...
  208.     return YES;
  209. }
  210.  
  211. - registerGame:sender        // accept registration...or not...
  212. {
  213.     char *tmp2str = malloc(64);
  214.     const char *tmpstr = [regNumText stringValue];
  215.     
  216.     strcpy(key, tmpstr);
  217.     if ([self keyOK]) {
  218.         [self writeKey];
  219.         sprintf(tmp2str, [strings valueForStringKey:"Reg"], serialNum);
  220.         [[regText setStringValue:tmp2str]
  221.             setTextGray:NX_DKGRAY];
  222.     } else {
  223.         [self writeKey];
  224.         [[regText setStringValue:[strings valueForStringKey:"Unreg"]]
  225.             setTextGray:NX_WHITE];
  226.     }
  227.     free(tmp2str);
  228.     [registerPanel orderOut:self];
  229.     [NXApp stopModal];
  230.     return self;
  231. }
  232.  
  233. - cancelRegistration:sender        // cancel registration modal loop...
  234. {
  235.     [registerPanel orderOut:self];
  236.     [NXApp stopModal];
  237.     return self;
  238. }
  239.  
  240. - suggestion:sender    // This is pretty much lifted from Opener.
  241. {
  242.     char subj[256]; // w[256] = "whoami";
  243.     char body[4096] = "";
  244.  
  245. #define call(a,b) [s performRemoteMethod:a with:b length:strlen(b)+1]
  246.  
  247.     id s = [NXApp appSpeaker];
  248.     int x = 1;
  249.     int doit = NO;
  250.     
  251.     const char *tmpstr = NXGetDefaultValue ([NXApp appName], "Mail");
  252.     
  253.     if (!tmpstr) doit = YES;
  254.     else if (strcmp(tmpstr, "OK")) doit = YES;
  255.     if (doit) x = NXRunAlertPanel([strings valueForStringKey:"Warning"],
  256.         [strings valueForStringKey:"Clobber"],
  257.         [strings valueForStringKey:"OK"],
  258.         [strings valueForStringKey:"OKForever"],
  259.         [strings valueForStringKey:"Abort"]);
  260.         
  261.     if (x == 0) NXWriteDefault ([NXApp appName], "Mail", "OK");
  262.     if (x == -1) return self; // abort
  263.  
  264.     sprintf(body, [strings valueForStringKey:"MailMessage"],
  265.             [strings valueForStringKey:"AuthorName"], [NXApp appName]);
  266.  
  267.     NXPortFromName("Mail", NULL); // make sure app is launched
  268.     [[NXApp appSpeaker] setSendPort:NXPortFromName("MailSendDemo", NULL)];
  269.  
  270.     sprintf(subj,"Comments and suggestions for ``%s'' ",[NXApp appName]);
  271.     strcat(subj,_versionString); strcat(subj, " (");
  272.     strcat(subj,serialNum); strcat(subj,")");
  273.     strcat(body,[NXApp userRealName]); strcat(body,"\n");
  274.  
  275.     call("setTo:", authorEmail);
  276.     call("setSubject:",subj);
  277.     call("setBody:",body);
  278.     
  279.     return self;
  280. }
  281.  
  282. - costCalc:sender
  283. { // override for more useful functions...
  284.     [costText setIntValue:10];
  285.     return self;
  286. }
  287.  
  288. - printOrderForm:sender    // Do -costCalc and then print orderForm.
  289. {
  290.     [self costCalc:self];
  291.     [[sender window] smartPrintPSCode:sender];
  292.     return self;
  293. }
  294.  
  295.  
  296. @end
  297.